<?php

namespace app\common\model;

use app\common\controller\Helper;
use app\common\enums\StatusEnum;
use think\Model;

/**
 * This is the model class for table "oauth".
 * @property int $id 自增ID
 * @property string $openid openid
 * @property string $unionid unionid
 * @property int $parent_id 父级id
 * @property string $share_key 分享唯一key
 * @property string $nickname 昵称
 * @property string $phone 用户绑定的手机号（国外手机号会有区号）
 * @property string $pure_phone 没有区号的手机号
 * @property int $integral 积分
 * @property int $sex 用户的性别，1男性，2女性，0未知
 * @property string $province 省份
 * @property string $city 城市
 * @property string $country 国家
 * @property string $head_img 头像
 * @property string $signature 个性签名
 * @property int $autoplay 是否自动播放，1是，0否
 * @property int $status 状态 0禁用，1启用
 * @property int $create_at 添加时间
 * @property int $update_at 修改时间
 */
class Userinfo extends Model
{
    use Helper;

    protected $table = 'oauth';
    // 自动播放
    const AUTOPLAY = 1;
    // 不自动播放
    const AUTOPLAY_NO = 0;

    public static function attributes($attribute, $key = null)
    {
        $list = [
            'sex' => [
                0 => '未知',
                1 => '男',
                2 => '女'
            ],
            'autoplay' => [
                self::AUTOPLAY_NO => '否',
                self::AUTOPLAY => '是',
            ],
        ];
        return self::attributeReturn($list, $attribute, $key);
    }

    /**
     * 通过uid获取用户数据
     * @param $phone
     * @return array|null|\PDOStatement|string|\think\Model
     * @throws \think\Exception\DbException
     */
    public static function getByUid($uid)
    {
        return self::where('id', '=', $uid)->find();
    }

    /**
     * 通过分享键查找用户
     * @param $shareKey
     * @return array|\PDOStatement|string|\think\Model|null
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getOneByKey($shareKey)
    {
        return static::field('id, nickname')
            ->where(['share_key' => $shareKey, 'status' => StatusEnum::ENABLED])
            ->find();
    }

    /**
     * 通过用户ID查找用户
     * @param $uid
     * @return array|\PDOStatement|string|\think\Model|null
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public static function getOne($uid)
    {
        return self::field('id, openid, share_key, nickname, integral, sex, province, city, country, head_img, signature, autoplay')
            ->where('id', '=', $uid)->find();
    }
    
    
    /**
     * 通过unionid获取用户数据
     * @param $phone
     * @return array|null|\PDOStatement|string|\think\Model
     * @throws \think\Exception\DbException
     */
    public static function getByUnionid($unionid)
    {
        return self::where('unionid', '=', $unionid)->find();
    }
    
    /**
     * 通过phone获取用户数据
     * @param $phone
     * @return array|null|\PDOStatement|string|\think\Model
     * @throws \think\Exception\DbException
     */
    public static function getByPhone($phone)
    {
        return self::where('phone', '=', $phone)->find();
    }
    
    /**
     * 通过设备号获取用户数据
     * @param $phone
     * @return array|null|\PDOStatement|string|\think\Model
     * @throws \think\Exception\DbException
     */
    public static function getByDevice($device_info)
    {
        return self::where('device_info', '=', $device_info)->count('id');
    }
    
    
    /**
     * 删除
     * @param $uid
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public static function deleteOne($id)
    {
        return static::where([
            'id' => $id,
        ])->delete();
    }
}